import java.util.Scanner;

public class Test {
    public static void main1(String[] args) {
        linkTable linkTable = new linkTable();
        linkTable.createList();
        linkTable.display();
        System.out.println("========反转链表========");
        linkTable.reverseList();
        linkTable.display();
        System.out.println("=====链表的中间结点=======");
        linkTable.middleNode();
        linkTable.display();
        linkTable.clear();
        System.out.println("=====链表中倒数第4个节点====");
        linkTable.createList();
        linkTable.display();
        linkTable.getNodeFromEnd1(4);
        linkTable.display();
    }

    public static void main2(String[] args) {
        linkTable linkTable = new linkTable();
        ListNode l1 = new ListNode(1);
        linkTable.addLast(l1,4);
        linkTable.addLast(l1,5);
        ListNode l2 = new ListNode(1);
        linkTable.addLast(l2,2);
        linkTable.addLast(l2,3);
        linkTable.addLast(l2,6);
        linkTable.display(l2);
        System.out.println("========合并两个有序链表======");
        ListNode ret = linkTable.mergeTwoLists(l1,l2);
        linkTable.display(ret);
    }

    public static void main3(String[] args) {
        linkTable linkTable = new linkTable();
        ListNode listNode = new ListNode(5);
        linkTable.addLast(listNode,1);
        linkTable.addLast(listNode,4);
        linkTable.addLast(listNode,8);
        linkTable.addLast(listNode,7);
        linkTable.addLast(listNode,3);
        linkTable.addLast(listNode,9);
        linkTable.addLast(listNode,2);
        System.out.println("=======链表分割======");
        ListNode ret = linkTable.partition(listNode,110);
        linkTable.display(ret);

    }

    public static void main4(String[] args) {
        linkTable linkTable = new linkTable();
        ListNode listNode = new ListNode(1);
        linkTable.addLast(listNode,2);
        linkTable.addLast(listNode,3);
        linkTable.addLast(listNode,3);
        linkTable.addLast(listNode,4);
        linkTable.addLast(listNode,5);
        linkTable.addLast(listNode,5);
        linkTable.addLast(listNode,6);
        System.out.println("====删除链表中重复的结点=====");
        ListNode ret = linkTable.deleteDuplication1(listNode);
        linkTable.display(ret);



        ListNode listNode1 = new ListNode(1);
        linkTable.addLast(listNode1,1);
        linkTable.addLast(listNode1,2);
        linkTable.addLast(listNode1,3);
        linkTable.addLast(listNode1,3);
        linkTable.addLast(listNode1,5);
        linkTable.addLast(listNode1,5);
        linkTable.addLast(listNode1,6);
        System.out.println("====删除链表中重复的结点头重复=====");
        ListNode ret1 = linkTable.deleteDuplication1(listNode1);
        linkTable.display(ret1);
    }


    public static void main5(String[] args) {
        linkTable linkTable = new linkTable();
        ListNode listNode = new ListNode(1);
        linkTable.addLast(listNode,2);
        linkTable.addLast(listNode,3);
        linkTable.addLast(listNode,3);
        linkTable.addLast(listNode,4);
        linkTable.addLast(listNode,5);
        linkTable.addLast(listNode,5);
        linkTable.addLast(listNode,6);
        System.out.println("=====哈希表删除链表中重复的结点=====");
        ListNode ret = linkTable.deleteDuplication2(listNode);
        linkTable.display(ret);
    }

    public static void main6(String[] args) {
        linkTable linkTable = new linkTable();
        ListNode listNode = new ListNode(1);
        linkTable.addLast(listNode,2);
        linkTable.addLast(listNode,2);
        linkTable.addLast(listNode,1);
//        linkTable.addLast(listNode,4);
//        linkTable.addLast(listNode,5);
//        linkTable.addLast(listNode,5);
//        linkTable.addLast(listNode,6);
        System.out.println("=======链表的回文结构=======");
        System.out.println(linkTable.chkPalindrome(listNode));
    }


    public static void main7(String[] args) {
        linkTable linkTable = new linkTable();
//        第一个链表
        ListNode node1 = new ListNode(1);
        linkTable.addLast(node1, 2);
        linkTable.addLast(node1, 3);
        linkTable.addLast(node1, 4);
        linkTable.addLast(node1, 5);
        linkTable.addLast(node1, 6);
//        第二个链表
        ListNode node2 = new ListNode(9);
        node2.next = node1.next.next.next.next;
        System.out.println("======相交链表==相交====");
        ListNode ret = linkTable.getIntersectionNode(node1,node2);
        linkTable.display(ret);

//        不相交的情况（两个链表 不是同一个地址 即使值一样但是地址不相同）
        ListNode node3 = new ListNode(9);
        linkTable.addLast(node3, 5);
        linkTable.addLast(node3, 6);
        System.out.println("======相交链表==不相交为null====");
        ListNode ret1 = linkTable.getIntersectionNode(node1,node3);
        linkTable.display(ret1);
    }

    public static void main8(String[] args) {
        linkTable linkTable = new linkTable();
        ListNode node = new ListNode(1);
        linkTable.addLast(node, 2);
        linkTable.addLast(node, 3);
//        node.next.next.next = node;
        System.out.println("======是否是环形链表====");
        boolean ret = linkTable.hasCycle(node);
        System.out.println(ret);
    }


    public static void main9(String[] args) {
        linkTable linkTable = new linkTable();
        ListNode node = new ListNode(1);
        linkTable.addLast(node, 2);
        linkTable.addLast(node, 3);
        linkTable.addLast(node, 4);
        linkTable.addLast(node, 5);
        node.next.next.next.next.next = node.next;//麻了
        System.out.println("=====环形链表 返回开始入环的第一个节点======");
        ListNode ret = linkTable.detectCycle(node);
        linkTable.display(ret);
    }


    public static void main10(String[] args) {
        linkTable linkTable = new linkTable();
        ListNode node = new ListNode(1);
        linkTable.addLast(node, 2);
        linkTable.addLast(node, 3);
        linkTable.addLast(node, 4);
        linkTable.addLast(node, 5);
        System.out.println("======链表中倒数第k个节点=====");
        ListNode ret = linkTable.getNodeFromEnd2(node,2);
        System.out.println(ret.val);
    }


    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextLine()){//循环
            String str = scanner.nextLine();
//            System.out.println(linkTable.func(str));
            System.out.println(linkTable.func2(str));
        }

    }





}
